package com.atguigu.gmall.activity.service;

import com.atguigu.gmall.activity.model.SeckillGoods;
import com.atguigu.gmall.activity.model.UserRecode;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.order.model.OrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface SeckillGoodsService extends IService<SeckillGoods> {
    /**
     * 查询Redis中当日秒杀商品列表
     *
     * @return
     */
    List<SeckillGoods> getSeckillGoodsList();

    /**
     * 查询指定秒杀商品信息
     * @param skuId
     * @return
     */
    SeckillGoods getSeckillGoods(Long skuId);

    /**
     * 为当前用户生成当前抢购商品抢购码
     * @param skuId
     * @return
     */
    Result getSeckillSkuIdStr(Long skuId, String userId);

    /**
     * 秒杀下单预处理(不处理真实秒杀业务,将秒杀购买意向发送MQ)
     * @param skuId 购买商品
     * @param skuIdStr 抢购码
     * @return
     */
    Result seckillPre(String userId, Long skuId, String skuIdStr);

    /**
     * 处理秒杀队列中下单请求,秒杀订单预处理
     * @param userRecode
     */
    void processSeckillRequest(UserRecode userRecode);

    /**
     * 秒杀成功扣库秒杀商品苦库存
     * @param skuId
     */
    void deductStock(Long skuId);

    /**
     * 前端定时发起检查当前用户秒杀商品结果
     *
     * @param skuId 秒杀商品ID
     * @return
     */
    Result checkOrderResult(String userId, Long skuId);

    /**
     * 获取当前登录用户秒杀订单确认页面相关数据
     *
     * @return
     */
    Map<String, Object> getSeckillOrderTradeDatas(String userId);

    /**
     * 保存秒杀订单
     * @param orderInfo
     * @return
     */
    Long submitSeckillOrder(OrderInfo orderInfo);

    void processCleanCache();
}
